import {Pipe, PipeTransform} from '@angular/core';
import {FileType} from "../setting/enums";

@Pipe({
  name: 'fileType'
})
export class FileTypePipe implements PipeTransform {
  /**
   * 文件名与文件后缀、文件语言、文件图标
   * @param filename 文件名
   * @param type 返回类型（'icon' | 'language'）
   * 1.文件后缀一般为文件名'.'之后的字符
   * 2.文件后缀大部分直接对应文件图标，但有一些特殊的如'.babelrc'、'.dockerignore'、'Dockerfile'、'webpack.config.js'、'yarn.lock'等
   * 这些特殊的文件在指定文件图标的时候需要特殊处理，其他情况默认文档图标。
   * 3.文件语言。在枚举中根据文件后缀制定了一些对应的文件语言，如果遇到未指定的，不指定语言；
   */


  transform(filename: string, type: string = 'icon'): any {
    let suffix: string, icon: string, splited;
    //如果文件名中包含'.'
    filename = filename.toLowerCase();
    if (/./.test(filename)) {
      splited = filename.split('.');
      suffix = splited[splited.length - 1];
    }
    icon = FileTypePipe.getFileIcon(filename, suffix);
    let language = FileType[suffix] ? FileType[suffix] : '';
    let iconClass = 'icon-' + icon;
    return type === 'icon' ? iconClass : language;
  }

  static getFileIcon(filename, suffix) {
    let icon: string;
    if (filename === 'dockerfile' || filename === '.dockerignore') {
      icon = 'docker';
    } else if (filename.indexOf('yarn') === 0) {
      icon = 'yarn';
    } else if (filename.indexOf('webpack') === 0) {
      icon = 'webpack';
    } else if (filename.indexOf('karma') === 0) {
      icon = 'karma';
    } else if (filename.indexOf('protractor') === 0) {
      icon = 'protractor';
    } else if (filename.indexOf('nginx') === 0) {
      icon = 'nginx';
    } else if (suffix.indexOf('babel') === 0) {
      icon = 'babel';
    } else if (suffix.indexOf('travis') === 0) {
      icon = 'travis';
    } else if (suffix.indexOf('gitignore') === 0) {
      icon = 'git';
    } else if (suffix.indexOf('eslint') === 0) {
      icon = 'eslint';
    } else if (suffix === 'webp') {
      icon = 'img';
    } else if (suffix === 'doc' || suffix === 'docx') {
      icon = 'doc';
    } else if (suffix === 'xls' || suffix === 'xlsx') {
      icon = 'excel';
    } else {
      icon = FileType[suffix] ? suffix : 'wendang';//未指定情况下，如果枚举中有相应支持语言则选择图标，否则为'wendang'图标
    }
    return icon;
  }

}
